{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cd9b956a58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(666)\n",
    "X = np.random.normal(0,1, size=(200, 2))\n",
    "y = np.array((X[:,0]**2 + X[:,1]**2)<1.5, dtype='int')\n",
    "\n",
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用逻辑回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from c26_LogisticRegression import LogisticRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression()"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_reg = LogisticRegression()\n",
    "log_reg.fit(X,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.605"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_reg.score(X,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_decision_boundary(model, axis):\n",
    "    x0, x1 = np.meshgrid(\n",
    "        np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)),\n",
    "        np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100))\n",
    "    )\n",
    "    x_new = np.c_[x0.ravel(), x1.ravel()]\n",
    "    \n",
    "    y_predict = model.predict(x_new)\n",
    "    zz = y_predict.reshape(x0.shape)\n",
    "    from matplotlib.colors import ListedColormap\n",
    "    custom_cmap = ListedColormap(['#EF9A9A', '#FFF59D', '#90CAF9'])\n",
    "    plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\fangyang\\Anaconda3\\lib\\site-packages\\matplotlib\\contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
      "  s)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cd9bc87b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(log_reg, axis=[-4,4,-4,4])\n",
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 给逻辑回归添加多项式项\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "def PolynomialLogisticRegression(degree):\n",
    "    return Pipeline([\n",
    "        ('poly', PolynomialFeatures(degree=degree)),\n",
    "        ('std_scaler', StandardScaler()),\n",
    "        ('log_reg', LogisticRegression())\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('poly', PolynomialFeatures(degree=2, include_bias=True, interaction_only=False)), ('std_scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('log_reg', LogisticRegression())])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg = PolynomialLogisticRegression(degree=2)\n",
    "poly_log_reg.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.95"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg.score(X,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\fangyang\\Anaconda3\\lib\\site-packages\\matplotlib\\contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
      "  s)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cd9c821ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(poly_log_reg, axis=[-4,4,-4,4])\n",
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('poly', PolynomialFeatures(degree=20, include_bias=True, interaction_only=False)), ('std_scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('log_reg', LogisticRegression())])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg2 = PolynomialLogisticRegression(degree=20)\n",
    "poly_log_reg2.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\fangyang\\Anaconda3\\lib\\site-packages\\matplotlib\\contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
      "  s)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cd9c983f28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(poly_log_reg2, axis=[-4,4,-4,4])\n",
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
